/**
 * 
 */
package br.gov.ba.mam.swing;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Vector;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.table.DefaultTableModel;

import br.gov.ba.mam.beans.Artista;
import br.gov.ba.mam.beans.ESTADO;
import br.gov.ba.mam.beans.Obra;
import br.gov.ba.mam.gerente.GerenteAplicacao;
import br.gov.ba.mam.swing.PainelConsulta.TELA;

/**
 * @author Dora
 *
 */
public class PainelConsultaCategoriaEstado extends JPanel {

	private static final long serialVersionUID = 9122848920893960646L;
	
	private JScrollPane scroll = null;
	private JTable tabelaArtista = null;
	private JComboBox cbEstado;
	private int estadoSelecionado;
	

	private ChangeListener change;
	private JTextField txtQuantidade;

	/**
	 * @param telaPrincipal
	 */
	public PainelConsultaCategoriaEstado(ChangeListener telaPrincipal) {
		change = telaPrincipal;
		this.setLayout(null);
		scroll = new JScrollPane(this.tabelaArtista);
		
		JLabel lblFiltro = new JLabel("Escolha um estado:");
		lblFiltro.setBounds(120,5,180,20);
		add(lblFiltro);
		
		JLabel quantidade = new JLabel("Quantidade:");
		quantidade.setBounds(3, 511, 70, 25);
		add(quantidade);
		
		txtQuantidade = new JTextField();
		txtQuantidade.setBounds(70, 511, 40, 25);
		txtQuantidade.setEnabled(false);
		add(txtQuantidade);
		
		
		JButton btVoltar = new JButton("Voltar");
		btVoltar.setBounds(420,511,100,25);
		btVoltar.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e) {
				change.stateChanged(new ChangeEvent(TELA.TELA_CONSULTA));
			}
		});
		add(btVoltar);
		
		
		cbEstado = new JComboBox();
		for (ESTADO estado : ESTADO.values()) {
			cbEstado.addItem(estado);
		}
		cbEstado.setBounds(120,25,300,20);
		cbEstado.addActionListener(new ActionListener(){
			@Override
			public void actionPerformed(ActionEvent e) {
				estadoSelecionado = ((JComboBox)e.getSource()).getSelectedIndex();
				atualizarJTable();
			}
		});

		add(cbEstado);
		atualizarJTable();
	}

	public void atualizarJTable() {
		if (scroll != null) {
			this.remove(scroll);
		}

		Vector<String> titulo = new Vector<String>();
		titulo.add("Categoria");
		titulo.add("Quantidade");
		
		Vector<Vector<Object>> colunas = new Vector<Vector<Object>>();
		List<Artista> listaArtista = GerenteAplicacao.getInstancia().getListaArtistas();
		HashMap<String, Integer> hashCategoria = new HashMap<String, Integer>();
		for (Artista artista : listaArtista) {
			if(estadoSelecionado == artista.getEndereco().getEstado()){
				for (Obra obra : artista.getListaObras()) {
					int valor = 0;
					if(hashCategoria.containsKey(obra.getCategoria().getNome())){
						valor = hashCategoria.get(obra.getCategoria().getNome())+1;
					} else{
						valor = 1;
					}
					hashCategoria.put(obra.getCategoria().getNome(),valor);
				}
			}
		}
		List<String> listaCategoria = new ArrayList<String>(hashCategoria.keySet());
		Collections.sort(listaCategoria);
		for (String categoria : listaCategoria) {
			Vector<Object> row = new Vector<Object>();
			row.add(categoria);
			row.add(hashCategoria.get(categoria));
			colunas.add(row);
		}
		
		DefaultTableModel model = new DefaultTableModel(colunas, titulo);
           
		this.tabelaArtista = new JTable(model) {
			private static final long serialVersionUID = 1L;
			public boolean isCellEditable(int rowIndex, int vColIndex) {
				return false;
			}
		};
		
		// habilita a selecao simples de linha
		this.tabelaArtista.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		txtQuantidade.setText(""+tabelaArtista.getRowCount());
		this.tabelaArtista.setVisible(true);
		this.scroll = new JScrollPane(this.tabelaArtista);
		this.scroll.setBounds(5, 60, 515, 450);
		this.add(scroll);
		this.scroll.revalidate();
		this.tabelaArtista.revalidate();
		this.revalidate();
	}
}
